//配置路由:核心插件Vue-Router
//插件:提供全局功能：全局组件router-link、router-view 、VC|$route|$router
//VueRouter实质是一个函数对象[构造函数]
import VueRouter from "vue-router";
//引入Vue,给项目安装插件
import Vue from 'vue';
//安装插件
Vue.use(VueRouter);
//原有的push方法先进行备份
let orginPush = VueRouter.prototype.push;
let originReplace = VueRouter.prototype.replace;
//VueRouter原型添加一个方法
//location:编程式导航第一个参数
VueRouter.prototype.push = function (location, resolve, reject) {
    //还是利用人家原有push方法进行路由跳转！！！存在一个this变了，this变为window->导致不能路由跳转！！！
    //需要保证push方法需要用vueRouter实例调用！！！
    //call|apply,可以篡改函数this，并且调用函数一些！！！
    if (resolve && reject) {
        //第一个参数:this篡改的this  第二个参数:路由跳转需要path|name|query|params配置项  第三34|成功与失败的回调
        orginPush.call(this, location, resolve, reject);
    } else {
        //这个分支:万一没有传递成功与失败回调自己手写一个
        orginPush.call(this, location, () => { }, () => { });
    }
}
VueRouter.prototype.replace = function (location, resolve, reject) {
    //还是利用人家原有push方法进行路由跳转！！！存在一个this变了，this变为window->导致不能路由跳转！！！
    //需要保证push方法需要用vueRouter实例调用！！！
    //call|apply,可以篡改函数this，并且调用函数一些！！！
    if (resolve && reject) {
        //第一个参数:this篡改的this  第二个参数:路由跳转需要path|name|query|params配置项  第三34|成功与失败的回调
        originReplace.call(this, location, resolve, reject);
    } else {
        //这个分支:万一没有传递成功与失败回调自己手写一个
        originReplace.call(this, location, () => { }, () => { });
    }
}

import routes from "./routes";
//对外暴露路由器[router]:一个路由器可以管理多个路由。
//暴露路由器:实质即为VueRouter类的实例,里面配置项不能瞎写、胡写、乱写
let router = new VueRouter({
    mode: 'hash',//路由模式：默认hash模式  history
    routes,
    scrollBehavior(to, from, savedPosition) {
        // return 期望滚动到哪个的位置
        //vue-router可以设置滚动行为[滚动条],需要有一个返回值对象 x--水平 y垂直方向
        return { y: 0 }
    }
});

export default router;





